package com.digicom.service.payment;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.digicom.common.entity.PayOrder;

import java.math.BigDecimal;
import java.util.Map;

/**
 * 支付服务接口
 */
public interface PaymentService extends IService<PayOrder> {
    /**
     * 创建支付订单
     *
     * @param userId 用户ID
     * @param articleId 稿件ID
     * @param payType 支付类型（0-支付宝，1-微信支付）
     * @param clientType 客户端类型（0-H5，1-APP）
     * @return 支付参数（包含支付链接等信息）
     */
    Map<String, Object> createPayOrder(Long userId, Long articleId, String payType, String clientType);

    /**
     * 支付回调处理
     *
     * @param payType 支付类型
     * @param params 回调参数
     * @return 处理结果
     */
    boolean payCallback(String payType, Map<String, String> params);

    /**
     * 订单查询
     *
     * @param orderNo 订单编号
     * @return 支付订单信息
     */
    PayOrder queryOrder(String orderNo);

    /**
     * 订单退款
     *
     * @param orderNo 订单编号
     * @param reason 退款原因
     * @return 退款结果
     */
    boolean refundOrder(String orderNo, String reason);

    /**
     * 查询订单列表（分页）
     *
     * @param payOrder 订单查询条件
     * @param page 分页对象
     * @return 分页结果
     */
    Page<PayOrder> listOrderPage(PayOrder payOrder, Page<PayOrder> page);

    /**
     * 获取用户订单列表（分页）
     *
     * @param userId 用户ID
     * @param page 分页对象
     * @return 分页结果
     */
    Page<PayOrder> listUserOrders(Long userId, Page<PayOrder> page);

    /**
     * 统计支付金额（按日期）
     *
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 统计结果
     */
    Map<String, BigDecimal> statisticPayAmount(String startDate, String endDate);

    /**
     * 支付宝H5支付
     *
     * @param orderNo 订单编号
     * @return 支付表单字符串
     */
    String alipayH5Pay(String orderNo);

    /**
     * 微信H5支付
     *
     * @param orderNo 订单编号
     * @return 支付链接
     */
    String wxpayH5Pay(String orderNo);
} 